Alle argumenten worden via verwijzing aan procedures doorgegeven, tenzij u dit anders aangeeft. Dit is efficiδnt omdat alle argumenten die via verwijzing worden doorgegeven, even snel worden doorgegeven en binnen de procedure dezelfde hoeveelheid ruimte (4 bytes) in beslag nemen, ongeacht het gegevenstype van het argument.
U kunt een argument via waarde doorgeven als u het sleutelwoord ByVal in de declaratie van de procedure opneemt. Argumenten die via waarde worden doorgegeven nemen tussen de 2 en 16 bytes in beslag, afhankelijk van het gegevenstype van het argument. Grotere gegevenstypen worden iets langzamer doorgegeven dan kleinere. U kunt hierdoor de gegevenstypen String en Variant in het algemeen beter niet via waarde doorgeven.
Als u een argument via waarde doorgeeft, kopieert u de oorspronkelijke variabele. Wijzigingen binnen de procedure hebben geen invloed op de oorspronkelijke variabele. Bijvoorbeeld:
Function Factorial (ByVal MyVar As Integer) ' Function-declaratie.
MyVar = MyVar - 1
If MyVar = 0 Then
Factorial = 1
Exit Function
End If
Factorial = Factorial(MyVar) * (MyVar + 1)
End Function
' Roep faculteit met een variabele S aan.
S = 5
Print Factorial(S) ' Geeft 120 (de faculteit van 5) weer
Print S ' Geeft 5 weer.
Als ByVal niet in de functiedeclaratie had gestaan, zouden de voorafgaande instructies Print 1 en 0 weergeven. MyVar
zou in dat geval namelijk naar variabele S
verwijzen, die met 1 wordt verlaagd tot deze gelijk is aan 0.
Aangezien ByVal een kopie van het argument maakt, kunt u een variant naar de functie Factorial erboven doorgeven. U kunt een variant niet via verwijzing doorgeven als in de declaratie van de procedure staat dat het argument van een ander gegevenstype is.